home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / include / incl98.zoo / falcon.h < prev    next >
C/C++ Source or Header  |  1993-11-05  |  19KB  |  636 lines

  1. /*
  2.  * GNU-C Bindings for Falcon XBIOS functions
  3.  * -- hyc 11-9-92 (uunet!hanauma.Jpl.Nasa.Gov!hyc)
  4.  */
  5.  
  6. #ifndef _FALCON_H
  7. #define _FALCON_H
  8.  
  9. #ifndef _OSBIND_H
  10. #include <osbind.h>
  11. #endif
  12.  
  13. #ifdef __LATTICE__
  14.  
  15. #define __F_TRAP {register d2,a2; "4e4e";}
  16.  
  17. void _vfv(int);
  18. char _bfv(int);
  19. short _sfv(int);
  20. long _lfv(int);
  21.  
  22. void _vfs(int, int);
  23. short _sfs(int, int);
  24. long _lfs(int, int);
  25.  
  26. void _vfss(int, int, int);
  27. long _lfss(int, int, int);
  28. void _vfll(int, long, long);
  29. void _vflp(int, long, void *);
  30.  
  31. void _vfssr(int, int, int, long *);
  32. void _vfssR(int, int, int, const long *);
  33. void _vfpls(int, void *, long, int);
  34. short _sflsp(int, long, int, void *);
  35. short _sfpls(int, void *, long, int);
  36. long _lfspp(int, int, void *, void *);
  37.  
  38. short _sfppss(int, void *, void *, int, int);
  39. void _vfllpp(int, long, long, void *, void *);
  40. void _vfplll(int, void *, long, long, long);
  41. void _vfplpl(int, void *, long, void *, long);
  42.  
  43. long _lfsssss(int, int, int, int, int, int);
  44.  
  45. void _vfppllll(int, void *, void *, long, long, long, long);
  46.  
  47.  
  48. #pragma inline _vfv((short))    __F_TRAP
  49. #pragma inline d0=_bfv((short))    __F_TRAP
  50. #pragma inline d0=_sfv((short))    __F_TRAP
  51. #pragma inline d0=_lfv((short))    __F_TRAP
  52.  
  53. #pragma inline _vfs((short),(short))    __F_TRAP
  54. #pragma inline d0=_sfs((short),(short))    __F_TRAP
  55. #pragma inline d0=_lfs((short),(short))    __F_TRAP
  56.  
  57. #pragma inline _vfss((short),(short),(short))    __F_TRAP
  58. #pragma inline d0=_lfss((short),(short),(short))    __F_TRAP
  59. #pragma inline _vfll((short),,)    __F_TRAP
  60. #pragma inline _vflp((short),,)    __F_TRAP
  61.  
  62. #pragma inline _vfssr((short),(short),(short),)    __F_TRAP
  63. #pragma inline _vfssR((short),(short),(short),)    __F_TRAP
  64. #pragma inline _vfpls((short),,,(short))    __F_TRAP
  65. #pragma inline d0=_sfpls((short),,,(short))    __F_TRAP
  66. #pragma inline d0=_sflsp((short),,(short),)    __F_TRAP
  67. #pragma inline d0=_lfspp((short),(short),,)    __F_TRAP
  68.  
  69. #pragma inline d0=_sfppss((short),,,(short),(short))    __F_TRAP
  70. #pragma inline _vfllpp((short),,,,)    __F_TRAP
  71. #pragma inline _vfplll((short),,,,)    __F_TRAP
  72. #pragma inline _vfplpl((short),,,,)    __F_TRAP
  73.  
  74. #pragma inline d0=_lfsssss((short),(short),(short),(short),(short),(short))    __F_TRAP
  75.  
  76. #pragma inline _vfppllll((short),,,,,)    __F_TRAP
  77.  
  78. #else /* !__LATTICE__ */
  79.  
  80. #ifndef trap_14_wwwwww
  81. #if __GNUC__ > 1
  82. #define trap_14_wwwwww(n,a,b,c,d,e)                    \
  83. __extension__                                \
  84. ({                                    \
  85.     register long retvalue __asm__("d0");                \
  86.     short _a = (short)(a);                        \
  87.     short _b = (short)(b);                        \
  88.     short _c = (short)(c);                        \
  89.     short _d = (short)(d);                        \
  90.     short _e = (short)(e);                        \
  91.                                     \
  92.     __asm__ volatile                        \
  93.     ("\
  94.         movw    %6,sp@-; \
  95.         movw    %5,sp@-; \
  96.         movw    %4,sp@-; \
  97.         movw    %3,sp@-; \
  98.         movw    %2,sp@-; \
  99.         movw    %1,sp@-; \
  100.         trap    #14; \
  101.         lea    sp@(12),sp"                    \
  102.     : "=r"(retvalue)                        \
  103.     : "g"(n), "r"(_a), "r"(_b), "r"(_c), "r"(_d), "r"(_e)        \
  104.     : "d0", "d1", "d2", "a0", "a1", "a2", "memory");        \
  105.     retvalue;                            \
  106. })
  107. #else
  108. #define trap_14_wwwwww(n,a,b,c,d,e)                    \
  109. ({                                    \
  110.     register long retvalue __asm__("d0");                \
  111.     short _a = (short)(a);                        \
  112.     short _b = (short)(b);                        \
  113.     short _c = (short)(c);                        \
  114.     short _d = (short)(d);                        \
  115.     short _e = (short)(e);                        \
  116.                                     \
  117.     __asm__ volatile                        \
  118.     ("\
  119.         movw    %4,sp@-; \
  120.         movw    %3,sp@-; \
  121.         movw    %2,sp@-; \
  122.         movw    %1,sp@-; \
  123.         movw    %0,sp@- "                    \
  124.     :: "r"(_a), "r"(_b), "r"(_c), "r"(_d), "r"(_e));        \
  125.                                     \
  126.     __asm__ volatile                        \
  127.     ("\
  128.         movw    %1,sp@-; \
  129.         trap    #14; \
  130.         lea    sp@(12),sp"                    \
  131.     : "=r"(retvalue)                        \
  132.     : "g"(n)                            \
  133.     : "d0", "d1", "d2", "a0", "a1", "a2");                \
  134.     retvalue;                            \
  135. })
  136. #endif
  137. #endif
  138.  
  139. #ifndef trap_14_wllll
  140. #define trap_14_wllll(n,a,b,c,d)                    \
  141. __extension__                                \
  142. ({                                    \
  143.     register long retvalue __asm__("d0");                \
  144.     long _a = (long)(a);                        \
  145.     long _b = (long)(b);                        \
  146.     long _c = (long)(c);                        \
  147.     long _d = (long)(d);                        \
  148.                                     \
  149.     __asm__ volatile                        \
  150.     ("\
  151.         movl    %5,sp@-; \
  152.         movl    %4,sp@-; \
  153.         movl    %3,sp@-; \
  154.         movl    %2,sp@-; \
  155.         movw    %1,sp@-; \
  156.         trap    #14; \
  157.         lea    sp@(18),sp"                    \
  158.     : "=r"(retvalue)                        \
  159.     : "g"(n), "r"(_a), "r"(_b), "r"(_c), "r"(_d)            \
  160.     : "d0", "d1", "d2", "a0", "a1", "a2", "memory");        \
  161.     retvalue;                            \
  162. })
  163. #endif
  164.  
  165. #ifndef trap_14_wllllll
  166. #define trap_14_wllllll(n,a,b,c,d,e,f)                    \
  167. __extension__                                \
  168. ({                                    \
  169.     register long retvalue __asm__("d0");                \
  170.     long _a = (long)(a);                        \
  171.     long _b = (long)(b);                        \
  172.     long _c = (long)(c);                        \
  173.     long _d = (long)(d);                        \
  174.     long _e = (long)(e);                        \
  175.     long _f = (long)(f);                        \
  176.                                     \
  177.     __asm__ volatile                        \
  178.     ("\
  179.         movl    %7,sp@-; \
  180.         movl    %6,sp@-; \
  181.         movl    %5,sp@-; \
  182.         movl    %4,sp@-; \
  183.         movl    %3,sp@-; \
  184.         movl    %2,sp@-; \
  185.         movw    %1,sp@-; \
  186.         trap    #14; \
  187.         lea    sp@(26),sp"                    \
  188.     : "=r"(retvalue)                        \
  189.     : "g"(n), "r"(_a), "r"(_b), "r"(_c), "r"(_d), "r"(_e), "r"(_f)    \
  190.     : "d0", "d1", "d2", "a0", "a1", "a2", "memory");        \
  191.     retvalue;                            \
  192. })
  193. #endif
  194.  
  195. #ifndef trap_14_wll
  196. #define trap_14_wll(n,a,b)                        \
  197. __extension__                                \
  198. ({                                    \
  199.     register long retvalue __asm__("d0");                \
  200.     long _a = (long)(a);                        \
  201.     long _b = (long)(b);                        \
  202.                                     \
  203.     __asm__ volatile                        \
  204.     ("\
  205.         movl    %3,sp@-; \
  206.         movl    %2,sp@-; \
  207.         movw    %1,sp@-; \
  208.         trap    #14; \
  209.         lea    sp@(10),sp"                    \
  210.     : "=r"(retvalue)                        \
  211.     : "g"(n), "r"(_a), "r"(_b)                    \
  212.     : "d0", "d1", "d2", "a0", "a1", "a2", "memory");        \
  213.     retvalue;                            \
  214. })
  215. #endif
  216.  
  217. #ifndef trap_14_wlwl
  218. #define trap_14_wlwl(n,a,b,c)                        \
  219. __extension__                                \
  220. ({                                    \
  221.     register long retvalue __asm__("d0");                \
  222.     long _a = (long)(a);                        \
  223.     short _b = (short)(b);                        \
  224.     long _c = (long)(c);                        \
  225.                                     \
  226.     __asm__ volatile                        \
  227.     ("\
  228.         movl    %4,sp@-; \
  229.         movw    %3,sp@-; \
  230.         movl    %2,sp@-; \
  231.         movw    %1,sp@-; \
  232.         trap    #14; \
  233.         lea    sp@(12),sp"                    \
  234.     : "=r"(retvalue)                        \
  235.     : "g"(n), "r"(_a), "r"(_b), "r"(_c)                \
  236.     : "d0", "d1", "d2", "a0", "a1", "a2", "memory");        \
  237.     retvalue;                            \
  238. })
  239. #endif
  240.  
  241. #endif /* __LATTICE__ */
  242.  
  243. /*
  244.  * Video
  245.  */
  246.  
  247. /* Video mode codes */
  248.  
  249. #define    VERTFLAG    0x100    /* double-line on VGA, interlace on ST/TV */
  250. #define    STMODES        0x080    /* ST compatible */
  251. #define    OVERSCAN    0x040    /* Multiply X&Y rez by 1.2, ignored on VGA */
  252. #define    PAL        0x020    /* PAL if set, else NTSC */
  253. #define    VGA        0x010    /* VGA if set, else TV mode */
  254. #define    COL80        0x008    /* 80 column if set, else 40 column */
  255. #define    NUMCOLS        7    /* Mask for number of bits per pixel */
  256. #define    BPS16        4
  257. #define    BPS8        3
  258. #define    BPS4        2
  259. #define    BPS2        1
  260. #define    BPS1        0
  261.  
  262. /* Montype return values */
  263. enum montypes {STmono=0, STcolor, VGAcolor, TVcolor};
  264.  
  265. /* VsetSync flags - 0=internal, 1=external */
  266.  
  267. #define    VID_CLOCK    1
  268. #define    VID_VSYNC    2
  269. #define    VID_HSYNC    4
  270.  
  271. #undef Setscreen
  272.  
  273. #ifdef __LATTICE__
  274.  
  275. #define Setscreen(a, b, c, d) _sfppss(5, a, b, c, d)
  276. #define Vsetmode(a) _sfs(88, a)
  277. #define Montype() _sfv(89)
  278. #define VsetSync(a) _vfs(90)
  279. #define VgetSize(a) _lfs(91)
  280. #define VsetRGB(a, b, c) _vfssR(93, a, b, c)
  281. #define VgetRGB(a, b, c) _vfssr(94, a, b, c)
  282. #define VsetMask(a, b) _vfss(150, a, b)
  283.  
  284. #else /* !__LATTICE__ */
  285.  
  286.  
  287. #define Setscreen(lscrn,pscrn,rez,mode)                    \
  288.     (short)trap_14_wllww((short)5,(long)(lscrn),(long)(pscrn),    \
  289.         (short)(rez),(short)(mode))
  290. #define Vsetmode(mode)                            \
  291.     (short)trap_14_ww((short)88,(short)(mode))
  292. #define Montype()                            \
  293.     (short)trap_14_w((short)89)
  294. #define    VgetSize(mode)                            \
  295.     (long)trap_14_ww((short)91,(short)(mode))
  296. #define    VsetSync(ext)                            \
  297.     (void)trap_14_ww((short)90,(short)(ext))
  298. #define VsetRGB(index,count,array)                    \
  299.     (void)trap_14_wwwl((short)93,(short)(index),(short)(count),    \
  300.         (long *)(array))
  301. #define VgetRGB(index,count,array)                    \
  302.     (void)trap_14_wwwl((short)94,(short)(index),(short)(count),    \
  303.         (long *)(array))
  304. #define VsetMask(andmask,ormask)                    \
  305.     (short)trap_14_www((short)150,(short)(andmask),(short)(ormask))
  306.  
  307. #endif /* __LATTICE__ */
  308.  
  309. /*
  310.  * Sound
  311.  */
  312.  
  313. /* _SND cookie values */
  314.  
  315. #define SND_PSG        0x01    /* Yamaha PSG */
  316. #define    SND_8BIT    0x02    /* 8 bit DMA stereo */
  317. #define    SND_16BIT    0x04    /* 16 bit CODEC */
  318. #define    SND_DSP        0x08    /* DSP */
  319. #define    SND_MATRIX    0x10    /* Connection Matrix */
  320.  
  321. /* XXX Docs say Falcon shows 0x3f. What does bit 0x20 mean ??? */
  322.  
  323. /*
  324.  * Sound data memory layout - samples are all signed values
  325.  *
  326.  *                 (each char = 1 byte, 2 chars = 1 word)
  327.  * 1 16 bit stereo track:    LLRRLLRRLLRRLLRR
  328.  * 1